package com.randi.framework.domain.service;

import com.randi.common.core.domain.model.LoginUser;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;

/**
 * @author ziye
 */
public interface ISysTokenService {

    /**
     * 获取请求token
     *
     * @param request request
     * @return token
     */
    String getToken(HttpServletRequest request);

    /**
     * 获取请求token
     *
     * @param request request
     * @return token
     */
    String getRefreshToken(HttpServletRequest request);

    /**
     * 验证令牌是否有效
     *
     * @param token token
     * @return 令牌
     */
    boolean verifyToken(String token);

    /**
     * 获取用户身份信息
     *
     * @param request request
     * @return 用户信息
     */
    LoginUser getLoginUser(HttpServletRequest request);

    /**
     * 获取验证用户身份信息
     *
     * @param token token
     * @return 用户信息
     */
    LoginUser getLoginUser(String token);

    /**
     * 获取刷新用户身份信息
     *
     * @param token token
     * @return 用户信息
     */
    LoginUser getRefreshLoginUser(String token);

    /**
     * 设置用户代理信息
     *
     * @param loginUser 登录信息
     */
    void setUserAgent(LoginUser loginUser);

    /**
     * 创建Token
     *
     * @param loginUser loginUser
     * @return tokenMap
     */
    HashMap<String, String> buildToken(LoginUser loginUser);

    /**
     * 移除Token缓存
     *
     * @param tokenId tokenId
     */
    void removeTokenCache(String tokenId);

    /**
     * 刷新 Token
     *
     * @param request request
     * @return tokenHashMap
     */
    HashMap<String, String> refreshToken(HttpServletRequest request);

    /**
     * 更新信息
     *
     * @param loginUser loginUser
     */
    void updateUserInfo(LoginUser loginUser);


}
